package com.web.service;

import com.web.observers.RequestResponseObserver;
import com.web.observers.RequestResultObserver;
import com.web.pojo.domain.Device;
import com.web.pojo.domain.DeviceGroup;
import com.web.pojo.vo.CommonResult;

import java.util.List;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;

/**
 * @Author: wws
 * describe:
 */
public interface NetworkServer {

    /**
     * 检查发送数据是否有回应
     * @return 结果
     */
    public CompletableFuture<Boolean> checkGateWayResponse(RequestResponseObserver requestResponseObserver) throws InterruptedException;

    /**
     * 发送下行数据
     * @return 结果
     */
    public CompletableFuture<Boolean> downstreamData(byte[] data);

    /**
     * 获取设备应答结果
     * @return 结果
     */
    public CompletableFuture<byte[]> getDeviceResult(RequestResultObserver requestResultObserver) ;

    /**
     * 设置设备参数
     * @param device 设备
     * @param fCnt 帧计数器
     * @param FRMPayload 操作数据
     * @return 结果
     */
    public Boolean setSwitch(Device device, byte[] fCnt, byte[] FRMPayload);

    /**
     * 获取设备信息
     * @param device 设备
     * @param fCnt 帧计数器
     * @param FRMPayload 操作命令
     * @param type 操作类型
     * @return 结果
     */
    public CommonResult getSwitch( Device device, byte[] fCnt, byte[] FRMPayload,byte type);

    /**
     * 设备分组
     * @param device 设备
     * @param fCnt 帧计数器
     * @param FRMPayload 控制命令
     * @return 结果
     */
    public Boolean deviceGrouping(Device device, byte[] fCnt, byte[] FRMPayload);

    /**
     * 异步，发送分组数据（无需回应）
     * @param deviceGroup 设备组信息
     * @param deviceList 设备列表
     */
    public void deviceGroupAddDevice(DeviceGroup deviceGroup, List<Device> deviceList);
}
